package mm.front.jsf.mb;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import mm.back.entity.Vendedor;
import mm.back.filtros.VendedoresFiltro;
import mm.back.service.VendedorService;
import mm.front.jsf.ConstantesOutcome;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component("vendedorBean")
@Scope("request")
public class VendedoresManagedBean {
	
	@Autowired
	@Qualifier("vendedorService")
	private VendedorService vendedorService;

	private VendedoresFiltro vendedorFiltro;
	
	private Vendedor vendedor;
	
	@PostConstruct
	public void init(){
		if (vendedorFiltro == null){
			vendedorFiltro = new VendedoresFiltro();
		}
		
		if (vendedor == null){
			vendedor = new Vendedor();
		}
	}
	

	/**
	 * @param vendedor the vendedor to set
	 */
	public void setVendedor(Vendedor vendedor) {
		this.vendedor = vendedor;
	}

	private List<Vendedor> vendedores;
	
	
	public String filtrarVendedores(){
		setVendedores(obtenerVendedores(getVendedorFiltro()));
		return ConstantesOutcome.VENDEDORES_LISTADO;
	}
	

	/**
	 * Obtiene la lista de vendedores para mostrra en la pantalla.
	 * @param filtro el filtro de vendedores.
	 * @return los vendedores.
	 */
	public List<Vendedor> obtenerVendedores(VendedoresFiltro filtro){
		return vendedorService.searchVendedores(filtro);
	}
	
	/**
	 * crea un vendedor
	 * @return el outcome
	 */
	
	public String alta(){
		
		
		
		vendedorService.createVendedor(getVendedor());
		
		FacesMessage fm = new FacesMessage("Se creo el vendedor número "+getVendedor().getId()+" con éxito");
		fm.setSeverity(FacesMessage.SEVERITY_INFO);
		FacesContext.getCurrentInstance().addMessage(null, fm);
		return ConstantesOutcome.VENDEDORES_LISTADO;
	}
	
	
	public String editarInit(Long id){
		vendedor = vendedorService.getVendedor(id);
		return ConstantesOutcome.VENDEDORES_MODIFICAR;
	}
	
	public String editarInit(){
		return editarInit(getVendedor().getId());
	}
	
	public String editar(){
		vendedorService.saveVendedor(getVendedor());
		FacesMessage fm = new FacesMessage("Se guardo el vendedor número "+getVendedor().getId()+" con éxito");
		fm.setSeverity(FacesMessage.SEVERITY_INFO);
		FacesContext.getCurrentInstance().addMessage(null, fm);
		return ConstantesOutcome.VENDEDORES_LISTADO;
	}
	
	public String eliminar(){
		
		vendedor = vendedorService.getVendedor(vendedor.getId());
		vendedor.setActivo(false);
		vendedorService.saveVendedor(vendedor);
		
		FacesMessage fm = new FacesMessage("Se dio de baja el vendedor número "+getVendedor().getId()+" con éxito");
		fm.setSeverity(FacesMessage.SEVERITY_INFO);
		FacesContext.getCurrentInstance().addMessage(null, fm);
		
		return ConstantesOutcome.VENDEDORES_LISTADO;
	}
	
	
	
	/**
	 * @return the vendedores
	 */
	public List<Vendedor> getVendedores() {
		if (vendedores == null){
			vendedores = this.obtenerVendedores(getVendedorFiltro());
		}
		return vendedores;
	}
	
	/**
	 * @param vendedores the vendedores to set
	 */
	public void setVendedores(List<Vendedor> vendedores) {
		this.vendedores = vendedores;
	}
	/**
	 * @param vendedorService the vendedorService to set
	 */
	public void setVendedorService(VendedorService vendedorService) {
		this.vendedorService = vendedorService;
	}
	
	/**
	 * @return the vendedorFiltro
	 */
	public VendedoresFiltro getVendedorFiltro() {
		if (vendedorFiltro == null){
			vendedorFiltro = new VendedoresFiltro();
			vendedorFiltro.setActivo(true);
		}
		return vendedorFiltro;
	}

	/**
	 * @param vendedorFiltro the vendedorFiltro to set
	 */
	public void setVendedorFiltro(VendedoresFiltro vendedorFiltro) {
		this.vendedorFiltro = vendedorFiltro;
	}

	
	/**
	 * @return the vendedor
	 */
	public Vendedor getVendedor() {
		if (vendedor == null){
			vendedor = new Vendedor();
		}
		return vendedor;
	}	
	
	public Long getNumeroTelefonico(){
		if (getVendedor().getTelefono() != null && !"".equals(getVendedor().getTelefono())){
			return Long.valueOf(getVendedor().getTelefono()) ;
		} else {
			return null;
		}
	}
	
	public void setNumeroTelefonico(Long numero){
		if (numero != null && numero > 0){
			getVendedor().setTelefono(numero.toString());
		} else {
			getVendedor().setTelefono(null);
		}
	}

	

}
